package javacommon.base;

import java.io.Serializable;
import java.util.List;

import org.springframework.dao.DataAccessException;

import cn.org.rapid_framework.page.Page;
/**
 * @author badqiu
 */
@SuppressWarnings("unchecked")
public interface EntityDao <E,PK extends Serializable>{

	public Object getById(PK id) throws DataAccessException;
	
	public void deleteById(PK id) throws DataAccessException;
	
	/** 插入数据 */
	public void save(E entity) throws DataAccessException;
	
	/** 更新数据 */
	public void update(E entity) throws DataAccessException;

	/** 根据id检查是否插入或是更新数据 */
	public void saveOrUpdate(E entity) throws DataAccessException;

	public boolean isUnique(E entity, String uniquePropertyNames) throws DataAccessException;
	
	/** 用于hibernate.flush() 有些dao实现不需要实现此类  */
	public void flush() throws DataAccessException;
	
	public List<E> findAll() throws DataAccessException;
	
	public List find(String queryString, Object...values);
	
	/**
	 * 原生态Sql调用
	 * @param sql
	 * @param page  若page为空不进行分页
	 * @return
	 */
	public Page findBySql(final String sql,final Page page);
}
